package main

import (
	"bytes"
	"fmt"
	"os/exec"
	"strings"
)

func main() {
	//Command 返回 Cmd 结构以使用给定的参数执行命名程序。
	//
	//它仅设置返回结构中的 Path 和 Args。
	//
	//如果 name 不包含路径分隔符，Command 会尽可能使用 LookPath 将 name 解析为完整路径。否则它直接使用名称作为路径。
	//
	//返回的 Cmd 的 Args 字段由命令名称后跟 arg 的元素构成，因此 arg 不应包含命令名称本身。例如，Command("echo", "hello")。 Args[0] 始终是名称，而不是可能解析的路径。
	//
	//在 Windows 上，进程将整个命令行作为单个字符串接收并进行自己的解析。 Command 使用与使用 CommandLineToArgvW 的应用程序兼容的算法（这是最常见的方式）将 Args 组合并引用到命令行字符串中。值得注意的例外是 msiexec.exe 和 cmd.exe（以及所有批处理文件），它们具有不同的取消引用算法。在这些或其他类似情况下，您可以自己进行引用并在 SysProcAttr.CmdLine 中提供完整的命令行，将 Args 留空

	cmd := exec.Command("tr", "a-z", "A-Z")
	cmd.Stdin = strings.NewReader("some-input")

	var out bytes.Buffer
	cmd.Stdout = &out
	cmd.Run()

	fmt.Printf("in all caps:%q\n", out.String())
}
